package am.bll.entity.basic;

import am.exception.ArgumentNullException;
import am.exception.ArgumentOutOfRangeException;

/**
 * 数量词类, 由数量和单位组成, 例如: 1箱, 10包, 23公斤
 */
public class Quantifier
{
    private int    num;
    private String unit;

    /**
     * 实例化
     * 
     * @param num 一个正整数, 表示数量
     * @param unit 一个字符串, 表示单位, 长度在1~5之间
     * 
     * @throws ArgumentOutOfRangeException num不是一个正整数
     * @throws ArgumentNullException unit为null
     * @throws ArgumentOutOfRangeException unit的长度不在1~5之间
     */
    public Quantifier(int num, String unit)
    {
        if (num <= 0)
        {
            throw new ArgumentOutOfRangeException("num=" + String.valueOf(num) + "  num应该是一个正整数");
        }
        if (unit == null)
        {
            throw new ArgumentNullException("unit不能为null");
        }
        if (unit.length() == 0 || unit.length() > 5)
        {
            throw new ArgumentOutOfRangeException("unit.length()=" + String.valueOf(unit.length()) + "  unit.length()应该在1~5之间");
        }
        this.num = num;
        this.unit = unit;
    }

    /**
     * 获取数量
     * 
     * @return 一个正整数, 表示数量
     */
    public int getNum()
    {
        return this.num;
    }

    /**
     * 获取单位
     * 
     * @return 一个字符串, 表示单位
     */
    public String getUnit()
    {
        return this.unit;
    }

    /**
     * 返回一个数量词的完整表示, 例如: 2个, 250只
     * 
     * @return 一个字符串, 格式化为: 数量 + 单位
     */
    @Override
    public String toString()
    {
        return String.valueOf(this.num) + this.unit;
    }
}
